package me.sealer.java8.actparamterized;

import me.sealer.java8.actparamterized.enumeration.Color;
import me.sealer.java8.actparamterized.model.Apple;
import me.sealer.java8.actparamterized.utils.FilterUtil;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

/**
 * Created by sealer on 09-17-2017.
 */
public class Test {
    public static void main(String[] args) {
        List<Apple> apples = new ArrayList<>();
        apples.add(new Apple(Color.GREEN, 120.0));
        apples.add(new Apple(Color.RED, 110.0));
        apples.add(new Apple(Color.YELLOW, 135.0));
        apples.add(new Apple(Color.GREEN, 150.0));
        apples.add(new Apple(Color.RED, 130.0));

        //使用匿名类创建 谓词对象
        List<Apple> redApples = FilterUtil.filter(apples, apple -> Color.RED.equals(apple.getColor()));
        System.out.println(redApples);

        //使用List自带的java8方法sort按照指定的条件排序
//        apples.sort((Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()));
        apples.sort(Comparator.comparing(Apple::getWeight));//上述语句的简化版本

        //用lambda表达式创建并启动线程 111
        new Thread(() -> System.out.println("lambda表达式创建线程")).start();

        //使用lambda表达式的位置都可以使用匿名类 222
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名类创建线程");
            }
        });

        //使用匿名类的位置都可以使用谓词实现行为参数化 333
        new Thread(new MyThread()).start();

    }

}

//333
class MyThread implements Runnable {
    @Override
    public void run() {
        System.out.println("使用实现Runnable接口的实现类创建线程");
    }
}
